package View;

import DAO.ItemDAO;
import DAO.FornecedorDAO;
import Pojo.Fornecedor;
import Pojo.Item;
import java.util.ArrayList;
import java.util.Scanner;


/**Classe que serve como menu para controle dos Itens
 * 
 * @author Vitor
 */
public class MenuItem {
    /**
     * Metodo que exibe para o usuario todos os atributos de um item
     * @param item - o item que de ser impresso 
     */
    public void imprimirItem(Item item){
        
        System.out.println("Nome = " + item.getNome());
        System.out.println("Codigo = " + item.getCodigo());
        System.out.println("Margem de Lucro(%) = " + item.getMargemDeLucro());
        System.out.println("----fornecedores---");
        for(Fornecedor lista : item.getFonecedores()) {
            System.out.println();
            System.out.println("nome = "+lista.getNome());
            System.out.println("codigo = "+lista.getCodigo());
        }
        System.out.println("-------------------");
        System.out.println("Preço de Custo = " + item.getPrecoDeCusto());
        System.out.println("Quantidade = " + item.getQuantidade());
        System.out.println();
    }
    
    /**
     * Metodo que exibe para o usuario as opcoes que ele podera fazer com o item
     */
    private void imprimeMenu(){
        
        System.out.println("---------Escolha uma opcao-------");
        System.out.println("(1)Cadastrar Item");
        System.out.println("(2)Excluir Item");
        System.out.println("(3)Buscar informações de um Item pelo nome");
        System.out.println("(4)Buscar preco de um Item pelo codigo");
        System.out.println("(5)Listar todos Item");
        System.out.println("(6)Voltar para o menu principal");
        System.out.println("Entre com uma opção: ");
    }
    
    /**Metodo que busca se um item ja se encontra na lista de itens,
     * caso não exista ele é cadastrado, recebendo do usuario os dados
     * @param itemDao - Funções que auxiliam na busca de item 
     * @return Item - item cadastrado
     */
    public Item cadastrarItem(ItemDAO itemDao){
        ArrayList<Item> lista;
        Scanner scanner = new Scanner(System.in);
        lista = itemDao.getListaItens();
        Item novo = new Item();
        System.out.println("Entre com o nome do Item:");
        novo.setNome(scanner.nextLine());
        if(lista.contains(novo)){
            System.out.println("Item ja existente!\n");
            return null;
        }
        do{ 
            System.out.println("Entre com o codigo do Item:");
            novo.setCodigo(Integer.parseInt(scanner.nextLine()));
        }while(itemDao.buscaItemCodigo(novo.getCodigo())!=null);
        System.out.println("Entre com a margem de lucro do Item(%):");
        novo.setMargemDeLucro(Float.parseFloat(scanner.nextLine()));
        System.out.println("Entre com o preço de custo do Item:");
        novo.setPrecoDeCusto(Float.parseFloat(scanner.nextLine()));
        itemDao.adicionarItem(novo);
        return novo;
    }
    
    /**
     * 
     * @param itemDao ItemDAO - Contem metodos necessarios para busca de itens e afins
     */
    public void menuOpcao(ItemDAO itemDao){
        Scanner scanner = new Scanner(System.in);
        int opcao,i;
        ArrayList<Item> lista;
        Item aux;
        do{
            imprimeMenu();
            opcao = Integer.parseInt(scanner.nextLine());  
            switch(opcao){
                case 1:
                    cadastrarItem(itemDao);                  
                    break;
                case 2:
                    System.out.println("Entre com o nome do Item a excluir:");
                    if(itemDao.excluirItem(scanner.nextLine())){
                        System.out.println("Item Excluido com Sucesso!");
                    }else{
                        System.out.println("Item não encontrado.");
                    }
                    break;
                case 3:
                    System.out.println("Entre com o nome do Item:");
                    aux = itemDao.buscaItemNome(scanner.nextLine());
                    if(aux == null){
                        System.out.println("Item não encontrado!");
                    }else{
                        imprimirItem(aux);
                    }
                    break;   
                case 4:
                    float preco;
                    System.out.println("Entre com o codigo do Item:");
                    aux=itemDao.buscaItemCodigo(Integer.parseInt(scanner.nextLine()));
                    if(aux == null){
                        System.out.println("Item não encontrado!");
                    }else{
                        preco=(float)(aux.getPrecoDeCusto()*(1+(aux.getMargemDeLucro())/100));
                        System.out.println("nome = "+aux.getNome());
                        System.out.println("Preço = "+preco);
                    }
                    break;
                case 5:
                    lista=itemDao.getListaItens();
                    System.out.println();
                    for(Item item: lista){
                        imprimirItem(item);
                    }
                    System.out.println();
                    break;
                case 6:
                    itemDao.escreverArquivo();
                    break;
                default:
                    System.out.println("Opção invalida!!");
            }
        }while(opcao!=6);       
    }
}
